/**
        @file   TetrisBlock.h
        @date   2013/01/24
        @author 임진영(deviak@deviak.com)
        @brief  테트리스 블록 클래스
*/
#ifndef TETRISBLOCK_H_
#define TETRISBLOCK_H_

#include <stdio.h>
#include <iostream>
#include <vector>

#include "Define.h"

using namespace std;

class TetrisGame;

/**
        @class  TetrisBlock
        @date   2013/01/24
        @author 임진영(deviak@deviak.com)
        @brief  테트리스 블록 클래스
*/
class TetrisBlock
{
public:
	typedef enum { kBlockTypeMax = 2, kBlockWidth = 4, kBlockHeight = 4 };		///< Tetris Block 갯 수 및 크기

public:
	TetrisBlock(TetrisGame* game);
	virtual ~TetrisBlock(void);

public:

	void			Init();								///< 블록 초기화
	void			Render();							///< 블록 출력
	void			Release();							///< 메모리 해제
	bool			CreateBlock();						///< 블록 생성
	bool			TurnBlock();						///< 블록 회전
	void			MoveBlock(const POSITION &p);		///< 블록 이동

	const int*		Block()	 { return &block_[0][0]; }	///< 블록
	POSITION		Pos() const { return pos_; }		///< 블록 위치

private:

	TetrisGame*		game_;							///< TetrisGame

	POSITION		pos_;							///< Block 위치
	
	int				block_[kBlockHeight][kBlockWidth];							// 현재 내려오는 Block
	int				block_list_[kBlockTypeMax][kBlockHeight][kBlockWidth];		// Block의 목록
};

#endif